package com.hhwy.framework.datasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.hhwy.framework.container.AppContainer;
import com.hhwy.framework.exception.ConfigException;


/**
 * <b>类 名 称：</b>DataSourceContextHolder <br/>
 * <b>类 描 述：</b>获得和设置上下文环境中数据源<br/>
 * <b>创 建 人：</b>lihuiming<br/>
 * <b>修 改 人：</b>Administrator<br/>
 * <b>修改时间：</b>2014年8月4日 下午2:31:01<br/>
 * <b>修改备注：</b><br/>
 * @version 1.0.0<br/>
 */
public class DataSourceContextHolder {
	static Logger log = LoggerFactory.getLogger(DataSourceContextHolder.class);
	private static final ThreadLocal<String> contextHolder=new ThreadLocal<String>();
	/**
	 * setDataSourceType(通过动态设置数据源名称，设定当前请求线程使用的数据源)<br/>
	 * @param dataSourceType 
	 * void
	 * @exception 
	 * @since  1.0.0
	 */
	public static void setDataSourceType(String dataSourceType){
		DynamicDataSource dds = AppContainer.getBeanFromMVContainer(DynamicDataSource.class);
		if(!dds.containsDatasource(dataSourceType))
			throw new ConfigException("切换的数据源未找到，名称:::"+dataSourceType);
		
		contextHolder.set(dataSourceType);
		log.info("线程数据源切换至:::"+dataSourceType);
	}
	/**
	 * getDataSourceType(获取当前线程使用的数据源名称)<br/>
	 * @return 
	 * String
	 * @exception 
	 * @since  1.0.0
	 */
	public static String getDataSourceType(){
		return  contextHolder.get();
	}
	/**
	 * clearDataSourceType(清空当前线程的数据源设置，恢复使用默认数据源)<br/> 
	 * void
	 * @exception 
	 * @since  1.0.0
	 */
	public static void clearDataSourceType(){
		contextHolder.remove();
		log.info("恢复使用默认数据源");
	}
}
